#ifndef HLW8012_H
#define HLW8012_H

#include "stm32f1xx_hal.h"

typedef struct {
  float    power; //4字节
  float    voltage;
  float    current;
  float    energy
} HLW8012_Data;

//卡尔曼滤波
typedef struct {
    float x;  // 状态估计 滤波后的输出值
    float P;  // 误差协方差  值越大，表示当前估计越不可靠
    float Q;  // 过程噪声方差 值越大，滤波器对变化越敏感（响应快但噪声大）
    float R;  // 测量噪声方差 值越大，滤波器越信任预测值（响应慢但平滑）
} KalmanFilter;

void HLW8012_Init(TIM_HandleTypeDef *htim);
float HLW8012_GetVoltage(void);
float HLW8012_GetCurrent(void);
float HLW8012_GetPower(void);
float HLW8012_GetEnergy(void);
void HLW8012_CaptureCallback(TIM_HandleTypeDef *htim);
HLW8012_Data get_hlw_data(void);

#endif